package com.satan.juc.demo23;

import java.util.concurrent.*;
/*
异步执行：允许你异步执行任务，而当前线程可以继续执行其他任务。
获取结果：可以在任务执行完毕后获取结果，如果任务还没完成，调用 get() 方法会阻塞直到任务完成。
取消任务：如果任务还没有执行或正在执行，可以通过 cancel() 方法来取消任务执行。
检查任务状态：可以检查任务是否已经完成或被取消。
*/

public class FutureTaskExample {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        // 创建一个Callable对象
        Callable<String> callable = () -> {
            // 模拟耗时的任务
            Thread.sleep(2000);
            return "任务结果";
        };

        // 使用FutureTask来包装Callable对象
        FutureTask<String> futureTask = new FutureTask<>(callable);

        // 线程启动，开始执行任务
        new Thread(futureTask).start();

        // 在这里可以做其他事情，而Callable任务在另一个线程中异步执行

        // 获取异步执行的结果，如果计算还没完成，get()方法会阻塞
        String result = futureTask.get(); // 这里会等待任务执行完毕

        System.out.println("任务的执行结果：" + result);
    }
}
